//
//  StringUtil.cpp
//  DiceWar
//
//  Created by xiaofeng on 20/6/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#include "StringUtil.h"

const int StringUtil::s_kFloatPrecision = 2;

std::wstring StringUtil::StringToWString(const std::string& str)
{
    std::wstring wstr(str.length(), L' ');
    std::copy(str.begin(), str.end(), wstr.begin());
    return wstr;
}

std::wstring StringUtil::StringToWString(const char* str)
{
    std::string stdStr(str);
    return StringToWString(stdStr);
}

std::string StringUtil::WStringToString(const std::wstring& wstr)
{
    std::string str(wstr.length(), ' ');
    std::copy(wstr.begin(), wstr.end(), str.begin());
    return str;
}

void StringUtil::ToLower(std::string& str)
{
    std::transform(str.begin(), str.end(), str.begin(), ::tolower);
}

void StringUtil::ToUpper(std::string& str)
{
    std::transform(str.begin(), str.end(), str.begin(), ::toupper);
}

void StringUtil::TrimBothSides(std::string& str) 
{
    TrimLeft(str);
    TrimRight(str);
}

void StringUtil::TrimLeft(std::string& str) 
{
    std::string::iterator iter = str.begin();
    std::string::iterator endIter = str.end();
    while (iter != endIter)
    {
        char ch = *iter;
        if (!IsTrimChar(ch)) break;
        ++iter;
    }
    
    str.erase(str.begin(), iter);
}

void StringUtil::TrimRight(std::string& str) 
{
    std::string::reverse_iterator iter = str.rbegin();
    std::string::reverse_iterator endIter = str.rend();
    while (iter != endIter)
    {
        char ch = *iter;
        if (!IsTrimChar(ch)) break;
        ++iter;
    }
    
    str.erase(iter.base(), str.end());
}

bool StringUtil::IsTrimChar(char ch)
{
    return ch == ' ' || ch == '\t';
}

